import { RouteObject } from "react-router-dom"
import { IFileModel, ITreeNode } from "./document"
import type { RcFile } from 'antd/es/upload/interface'
import { BaseOptionType, DefaultOptionType } from "antd/lib/select"
import React from "react"
/**
 * 页面数据模型
 */
export interface IData<T> {
  ViewModel: T
}
/**
 * 接口返回数据模型
 */
export interface IResponseData<T> {
  code: string;
  message?: string;
  data: T;
}
/**
 * 接口状态码
 */
export enum IResponseCodeType {
  /**
   * 成功
   */
  Success = '0000',
  /**
   * 错误
   */
  Fail = '1000',
  /**
   * 登录过期
   */
  TokenExpired = '401',
  /**
   * 验证分享密码
   */
  PasswordAuth = '4011',
  /**
  * 分享密码不正确
  */
  PasswordAuthFail = '4012',
  /**
   * 没有访问权限
   */
  NotAuth = '4013',
  /**
   * 分享链接失效
   */
  Invalid = '404',
  /**
   * 二次确认
   */
  TwoConfirm = '1005',
}
/**
 * react页面路由模型
 */
export type IRouteType = RouteObject & {
  meta?: {
    title?: string,
    name?: string,
    needLogin?: boolean
    isMenu?: boolean
  }
  icon?: React.ReactNode
  redirect?: string
  childrens?: Array<IRouteType>
}
/**
 * 文件基类
 */
export interface IFileBase {
  file_id: React.Key
  file_name?: string
}
/**
 * 文档助手消息基类
 */
export interface IFileHelperMessageBase {
  message_id: React.Key
}
/**
 * 文档助手中的消息类型
 */
export enum FileHelperMessageType {
  All = '',
  /**
   * 批注
   */
  Annotations = 'annotations',
}
/**
 * 批注基类
 */
export interface IAnnotationBase {
  id: React.Key
  mask?: string
  comment?: string
  comment_json?: string
  author?: string
  avatar_url?: string
  time?: {
    dateGroupType?: string
    result?: string
  }
}
/**
 * 搜索基类
 */
export interface ISearchBase {
  search_text: string
}
/**
 * 搜索入参基类
 */
export interface IPagingBase {
  page?: number
  limit?: number
  last_file_id?: React.Key
  order_date?: string
  last_msg_id?: React.Key
  last_log_id?: React.Key
}
/**
 * 分页数据默认值
 */
export enum PagingSize {
  /**
   * 每页数量
   */
  PageSize = 50
}
/**
 * 搜索结果基类
 */
export interface IPagingSumBase {
  total_count: number
}

/**
 * 文件根节点id
 */
export enum RootFilePath {
  /**
   * 最近文件列表根节点id
   */
  RecentDocId = "",
  /**
   * 收藏文件列表根节点id
   */
  FavorDocId = "",
  /**
   * 个人目录根节点id
   */
  MyDocId = "1",
  /**
   * 企业目录根节点id
   */
  EDocId = "2"
}
/**
 * 分栏面板宽度
 */
export enum SplitPaneSize {
  /**
   * 第二栏默认宽度
   */
  defaultSize = 280,
  minSize = 0,
  maxSize = 480,
  /**
   * 导航栏宽度
   */
  navBarSize = 60,
  /**
   * 侧边栏宽度
   */
  sideBarSize = 320,
  /**
   * 顶部搜索栏高度
   */
  headerBarSize = 60,
  /**
   * 预览器顶部操作栏高度
   */
  previewerHeaderBarSize = 60,
  /**
   * xlSheet表格顶部名称栏高度
   */
  xlSheetTopBarHeight = 60,
  /**
   * xlSheet表格底部操作栏高度
   */
  xlSheetBottomBarHeight = 35,
  /**
   * xlSheet表格单元格编辑栏高度
   */
  xlSheetEditbarHeight = 24,
  /**
   * xlSheet表格工具栏高度
   */
  xlSheetToolbarHeight = 40,
  /**
   * xlSheet表格单元格默认高度
   */
  xlSheetRowDefaultHeight = 20,
  /**
   * xlSheet表格第一列默认宽度
   */
  xlSheetLeftDefaultWidth = 60,
  /**
   * 微调基数
   */
  xlSheetAdjustBase = 0.8

}
/**
 * 权限状态（0：所有者，1：可管理，2:可编辑，3：仅查看）
 */
export enum PermissionStatus {
  Owner = "0",
  Editor = "2",
  Manager = "1",
  Viewer = "3"
}
/**
 * @description 文件后缀类型
 */
export enum FileTypes {
  /**
   * 文件夹
   */
  FOLDER = 'folder',
  /**
   * 虚拟文件夹
   */
  VIRTUALFOLDER = 'virtualfolder',
  /**
   * 上传的表格
   */
  XLSX = 'xlsx',
  XLS = 'xls',
  /**
   * 新建的表格，子表
   */
  ELS = "els",
  /**
   * 新建的表格模板，母表
   */
  ELT = "elt",
  PPTX = "pptx",
  PPT = "ppt",
  /**
   * 上传的文档
   */
  DOCX = "docx",
  DOC = "doc",
  /**
   * 新建的文档，子文档
   */
  EMD = "emd",
  /**
   * 新建的文档模板，母文档
   */
  EMT = "emt",
  VIDEO = "video",
  IMAGE = "image",
  PDF = "pdf",
  AUDIO = "audio",
  TXT = "txt",
  /**
   * 上传的Markdown文件
   */
  MD = "md",
  /**
   * 未知文件
   */
  UNKOWN = 'unkown',
  /**
   * 压缩包
   */
  ZIP = 'zip',
  JSON = 'json',
  /**
   * 脑图
   */
  EMIND = 'emind',
  /**
   * 思维导图
   */
  XMIND = 'xmind',
  /**
   * 网页链接
   */
  LINK = 'link',
  /**
   *  流程图
   */
  EVSD = 'evsd',
  FRM = 'frm',
  FRMT = 'frmt',
}
/**
 * @description 按钮类型
 */
export enum ButtonActionTypes {
  /**
   * 打开
   */
  OPEN = "open",
  /**
   * 共享
   */
  SHARE = "share",
  /**
   * 星标
   */
  STAR = "star",
  /**
   * 复制到
   */
  COPY = "copy",
  /**
   * 移动到
   */
  MOVE = "move",
  /**
   * 重命名
   */
  RENAME = "rename",
  /**
   * 删除
   */
  DEL = "del",
  /**
   * 下载
   */
  DOWNLOAD = "download",
  /**
   * 上传
   */
  UPLOAD = "upload",
  /**
   * 高级过滤
   */
  HIGHFILTER = "highfilter",
  /**
  * 筛选
  */
  FILTER = "filter",
  /**
   * 评论
   */
  COMMENT = "comment",
  /**
   * 历史
   */
  HISTORY = "history",
  /**
   * 侧边栏
   */
  SIDEBAR = "sidebar",
  /**
   * 编辑
   */
  EDIT = "edit",
  /**
   * 附件
   */
  ATTACHMENT = 'attachment',
  /**
   * 批注
   */
  ANNOTATIONS = 'annotations',
  /**
   * 扩大
   */
  EXPAND = 'expand',
  /**
   * 还原
   */
  SHRINK = 'shrink',
  /**
   * 置顶
   */
  TOPPING = 'topping',
  /**
   * 导出
   */
  EXPORT = 'export',
  /**
   * 文字提取
   */
  OCR = 'ocr',
  /**
   * 浏览图库
   */
  GALLERY = 'gallery',
  /**
   * 刷新
   */
  REFRESH = 'refresh',
  /**
   * 显示设置
   */
  FOLDERSHOWSET = 'foldershowset',
  /**
   * 工作流设置
   */
  WORKFLOWSET = 'workflowset',
  /**
   * 工作流
   */
  WORKFLOW = 'workflow',
  /**
   * 新增
   */
  ADD = 'add',
}
/**
 * @description 树形列表基础类型
 */
export interface INodeItemPropsBase {
  /**
   * @description 节点复选框值改变回调
   * @param {boolean} checked 是否选中
   * @param {ITreeNode<IFileModel>} nodeData 节点信息
   * @param {React.Key[]} involved 涉及到的节点id集合
   * @returns 
   */
  onCheckboxChange?: (checked: boolean, nodeData: ITreeNode<IFileModel>, involved: React.Key[]) => void
  /**
   * @description 节点展开/收起回调
   * @param {ITreeNode<IFileModel>} nodeData 节点信息 
   * @param {React.Key[]} involved 涉及到的节点id集合 
   */
  onChangeExpand?: (nodeData: ITreeNode<IFileModel>, involved: React.Key[]) => void
  /**
   * @description 节点点击回调
   * @param {ITreeNode<IFileModel>} nodeData 节点信息 
   * @param {React.Key[]} involved 涉及到的节点id集合
   * @returns 
   */
  onSelect?: (nodeData: ITreeNode<IFileModel>, involved: React.Key[]) => void
  /**
  * @description 节点三个点扩展菜单点击回调
  * @param {string} action 动作名称
  * @param {ITreeNode<IFileModel>} nodeData 节点信息 
  * @returns 
  */
  onButtonAction?: (action: string, nodeData: ITreeNode<IFileModel>) => void
  /**
   * @description 节点名称点击回调
   * @param {ITreeNode<IFileModel>} nodeData 节点信息  
   * @returns 
   */
  onOpenRow?: (nodeData: ITreeNode<IFileModel>) => void
  /**
   * @description 是否渲染右键菜单
   */
  contextMenu?: boolean
  /**
   * 是否能展开收起
   */
  expandable?: boolean
}
export interface IQuestionBase {
  session_id: string
}

/**
 * 筛选文件排序字典
 */
export enum FilterFileSortClass {
  /**
   * 默认更新时间倒序
   */
  Default = "default",
  /**
   * 创建时间正序
   */
  CreateAsc = "create_asc",
  /**
   * 创建时间倒序
   */
  CreateDesc = "create_desc",
  /**
   * 名称正序
   */
  NameAsc = "name_asc",
  /**
   * 名称倒序
   */
  NameDesc = "name_desc",
  /**
   * 大小正序
   */
  SizeAsc = "size_asc",
  /**
   * 大小倒序
   */
  SizeDesc = "size_desc",
}
/**
 * 筛选文件类型字典
 */
export enum FilterFileTypeClass {
  /**
   * 文档
   */
  EMD = 'emd,emt,docx,md,doc,frm,frmt,md',
  /**
   * 表格
   */
  ELS = 'els,elt,xlsx,xls',
  /**
   * 演示
   */
  PPTX = 'ppt,pptx,emind,evsd,xmind',
  /**
   * PDF
   */
  PDF = 'pdf,zip',
  /**
   * 图片
   */
  IMAGE = 'image',
  /**
   * 视频
   */
  VIDEO = 'video',
  /**
   * 音频
   */
  AUDIO = 'audio',
}
/**
 * 文档编辑时使用的内置编辑器字典
 */
export enum EditSequenceType {
  /**
   * docx,xlsx,pptx
   */
  OnlyOffice = 'onlyoffice',
  /**
   * all
   */
  XlAssist = 'xl_assist',
  /**
   * emd,emt
   */
  EmdEditor = 'emd_editor',
  /**
   * els,elt
   */
  ElsEditor = 'els_editor',
  /**
   * emind（脑图）
   */
  EmindEditor = 'emind_editor',
  /**
   * evsd（流程图）
   */
  EvsdEditor = 'evsd_editor',
  /**
   * Markdown（md,json）
   */
  MarkdownEditor = 'markdown_editor',
  /**
   * 表单模板
   */
  FrmtEditor = 'frmt_editor',
  /**
   * 表单
   */
  FrmEditor = 'frm_editor',
}
/**
 * 管理菜单
 */
export interface IAdminMenuModel {
  id: React.Key
  icon: string
  rule: string
  title: string
  tooltip: string
  url: string
}
/**
 * 系统设置字段信息
 */
export interface ISettingInfo {
  id?: string;
  code?: string
  value?: string
  tenant_id?: string
  create_id?: string
  create_by?: string
  file?: RcFile
}
/**
 * 数据字典类型
 */
export interface DictionaryType {
  id?: string
  type_label?: string
  type_id?: string
  order_sort?: string
  items_json?: string
}
/**
 * 数据字典选择项
 */
export interface DictionaryItemType {
  id?: string
  select_code?: string
  select_name?: string
  order_sort?: string
}
/**
 * 数据字典列表数据模型
 */
export interface DictionaryTypeModal {
  type_list: BaseOptionType[]
}
/**
 * 数据字典选项数据模型
 */
export interface DictionaryItemsModal {
  item_list: BaseOptionType[]
}
/**
 * 文档保存触发类型
 */
export enum SaveTriggerType {
  /**
   * 点击保存按钮
   */
  SaveBtn = 'save_btn',
  /**
   * 内容改变
   */
  ValueChange = 'value_change'
}
/**
 * 知识库基类
 */
export interface IKnowLedgeBase {
  base_id?: string
}
/**
 * 知识库类型
 */
export interface IKnowLedgeBaseInfo extends IKnowLedgeBase {
  base_name?: string
  comment?: string
}
/**
 * 知识库模型
 */
export interface IKnowLedgeBaseModal {
  base_list: BaseOptionType[]
}
/**
 * 更新知识库参数
 */
export interface IUpdateKnowLedgeBaseParams extends IKnowLedgeBase, IKnowLedgeBaseInfo {

}
/**
 * 根据知识库id获取文档清单列表参数
 */
export interface IGetFileListByBaseIdParams extends IKnowLedgeBase, IPagingBase {

}
/**
 * 向知识库中添加文件参数
 */
export interface IAddFileToKnowLedgeBaseParams extends IKnowLedgeBase, IFileBase {

}
/**
 * 知识库的文件清单模型
 */
export interface IKnowLedgeBaseFileListModel {
  file_list: BaseOptionType[]
}
/**
 * 角色信息
 */
export interface IRoleAdminInfo {
  name?: string
  id?: React.Key
}
/**
 * 角色列表
 */
export interface IRoleAdminListModel {
  result_list: BaseOptionType[]
}
/**
 * 部门管理信息
 */
export interface IDepartmentAdminInfo {
  name?: string
  id?: string
  count?: string
  code?: string
  child_code?: string
  parent_code?: string
  parent_id?: string
  childrens?: IDepartmentAdminInfo[]
  /**
   * 是否禁用
   */
  disabled?: boolean
}
/**
 * 部门成员管理列表
 */
export interface IDepartmentAdminListModel {
  result_list: IDepartmentAdminInfo[]
}
/**
 * 全部部门列表
 */
export interface IAllDepartmentListModel {
  result_list: DefaultOptionType[]
}
/**
 * 成员管理中人员信息
 */
export interface IMemberAdminInfo {
  user_id?: string
  name?: string
  department_id?: string
  phone?: string
  user_avatar?: string
  email?: string
  /**
   * 性别（0保密，1男，2女，3其他）
   */
  sex?: string
  role_ids?: string[]
  /**
   * 用户类型（-1后台管理员，0普通人员，1平台超级管理员）
   */
  type?: string
  /**
   * 用户状态（0正常，1锁定，2冻结，3注销）
   */
  user_state?: string
}
/**
 * 成员管理中人员列表
 */
export interface IMemberAdminListModel {
  result_list: BaseOptionType[]
}
/**
 * 获取成员列表参数
 */
export interface IMemberAdminListParams extends IPagingBase {
  department_id: string
}
/**
 * 新增成员成功返回信息
 */
export interface IMemberAdminAddInfo {
  password: string
}
/**
 * 解除绑定用户和角色参数
 */
export interface IUnbindRoleMemberParams {
  role_id: string
  user_ids: string
}
/**
 * 文件属性管理信息
 */
export interface IFileAttributeInfo {
  id?: string
  name?: string
  dictionary_id?: string
  dictionary_name?: string
  order_sort?: string
  /**
   * （0：不可输入，1：可输入）
   */
  allow_user_input?: string
  /**
   *  0：可修改名称和数据字典，1：不可修改名称和数据字典
   */
  is_class_attribute?: string
}
/**
 * 文件属性管理列表数据模型
 */
export interface IFileAttributeAdminModal {
  attribute_meta_list: BaseOptionType[]
}
/**
 * 硬件的监控信息
 */
export interface IMonitorModal {
  cpu: {
    total: number
    cpucore: number
    user: number
    temperature: number
  }
  mem: BaseOptionType
  fs: BaseOptionType[]
  network: BaseOptionType[]
  version: {
    version_download: string
    version_current: string
    new_version: string
  }
  system: {
    os: string
    version: string
    machine_name: string
    run_time: string
  }
  help: {
    about: string
    qq: string
    phone: string
  }
}
/**
 * 储存池信息
 */
export interface IStoreStatusModel {
  /**
   * 未使用盘
   */
  disk_no_used: BaseOptionType[]
  /**
   * 镜像
   */
  pv_status: BaseOptionType[]
  /**
   * 备份盘
   */
  lv_backup_status: BaseOptionType
  /**
   * 储存池
   */
  lv_status: BaseOptionType
}
// 添加镜像
export interface IAddMirrorParams {
  disk1: string
  disk2: string
}
// 添加磁盘
export interface IAddDiskParams {
  /**
   * 镜像名
   */
  raid_name: string
  /**
   * 磁盘名
   */
  disk_name: string
}

/**
 * 备份状态
 */
export interface IBackupStatusModel {
  backup_list: {
    local: BaseOptionType[]
    oss: BaseOptionType[]
  }
  backup_plan: string
  backup_status: string
  oss_status: string
}
/**
 * 恢复备份数据
 */
export interface ISystemRestoreParams {
  store_name: string
  store_type: string
}
/**
 * 设置备份计划
 */
export interface ISetBackupPlanParams {
  plan_json: string
}
/**
 * 系统升级
 */
export interface ISystemUpgradeParams {
  version: string
}
/**
 * 获取所有人员列表
 */
export interface IAllUserModel {
  user_list: DefaultOptionType[]
}
/**
 * 更改文档拥有人
 */
export interface IEditDocumentOwnerParams {
  /**
   * 原拥有人
   */
  source_owner: string
  /**
   * 更改后拥有人
   */
  target_owner: string
}
/**
 * 获取操作日志列表参数
 */
export interface IOperateLogListParams extends IPagingBase {
  query_param?: string
}
/**
 * 获取操作日志列表
 */
export interface IOperateLogModel {
  log_list: BaseOptionType[]
}
/**
 * 文件分类管理信息
 */
export interface IFileClassInfo {
  class_id?: string
  class_name?: string
  /**
   * 是否为用户自定义分类（0:否，1：是）--是否可编辑/删除
   */
  is_customer?: string
  childrens?: IFileClassInfo[]
  /**
   * 是否禁用
   */
  disabled?: boolean
}
/**
 * 文件分类管理列表
 */
export interface IFileClassModel {
  class_list: IFileClassInfo[]
}
/**
 * 文件分类属性信息
 */
export interface IFileClassAttrInfo extends IFileClassInfo {
  /**
   * 属性名称
   */
  name?: string
  /**
   * 属性id
   */
  id?: string
  comment?: string
  dictionary_id?: string
  dictionary_name?: string
}
/**
 * 文件分类属性列表
 */
export interface IFileClassAttrModel {
  attribute_list: BaseOptionType[]
}
/**
 * 获取多选文件分类情况下的属性列表的参数
 */
export interface IGetMultiClassAttributesParams {
  /**
   * 文件分类字符串数组
   */
  class_ids: string
}
/**
 * 从分类属性中添加文件属性的参数
 */
export interface IAddAttributeMetaFromClassParams {
  /**
   * 文件分类属性字符串数组
   */
  ids: string
}